
#ifndef SERWERINFO_H
#define SERWERINFO_H

#include "multidatagram.h"
#include "definedqueries.h"
#include <QTimer>
#include <QLineEdit>
#include <QLabel>
#include <QTableWidget>
#include <QString>
#include <QTextBrowser>
#include <QStringList>
#include <QBoxLayout>
#include <QScrollArea>
#include <QUdpSocket>
#include <QTcpSocket>
#include <QObject>
#include <QWidget>
#include <QTime>
#include <QVector>
#include <QListIterator>
#include <QThread>
#include "serwerlabelinfo.h"
#include <QMutex>
#include "players_graph.h"
#include <QPushButton>
#include <QListView>




class SerwerInfo: public QThread
{
Q_OBJECT
public:
    SerwerInfo(QString ip, int port,int localport,int id);

    int id;
    QString ip;
    int port;
    int localport;
    int graczy;
    int max_graczy;
    bool activeRcon;
    bool activeSerwer;
    QString rcon_password;
    QString rcon_challenge;
    QUdpSocket *socket_udp;


    QVector <MultiDatagram *> Multi;

    //grafincze strona 1
    QTableWidget *players_table_basic;
    QTextBrowser *bro;
    SerwerLabelInfo *LabelInfo;

    //graficzne strona 2
    players_graph *basic_player_graph;

    //widgety graficzne strona 3
    QTextBrowser *console_output;
    QLineEdit *console_input;
    QPushButton *send;
    QPushButton *clear;


    //wodgety graficzne 4
    QListView *view;

    //inicjalizacja
    //void init_serwer();
    void init_strona1();
    void init_strona2();
    void init_strona3();
    void init_strona4();

    void init_socket();
    void init_players_table_basic();
    void init_rcon_console();
    void run();

    //wysylanie odbieranie parsowanie
    void send_datagram(QString typ);
    void send_rcon_datagram(QString data);



    //odbieranie
    void przetworz_datagram(QByteArray &datagram);
    void parsuj_datagram(QByteArray &datagram, int typ);
    void parsuj_a2s_info_reply(QByteArray &datagram);
    void parsuj_a2s_info_reply2(QByteArray &datagram);
    void parsuj_a2s_multi_reply(QByteArray &datagram);
    void parsuj_a2s_rules_reply(QByteArray &datagram);
    void parsuj_a2s_player_reply(QByteArray &datagram);
    void parsuj_rcon_challenge_rcon_reply(QByteArray &datagram);
    void parsuj_rcon(QByteArray &datagram);
    void debug_parse(QByteArray &datagram);

signals:
    void serwer_valid(int, QString);
    void rcon_valid(int, bool);
    void wyslany_pakiet();
    void odebrany_pakiet();
    void serwer_status(bool, bool);
    void serwer_exit(int);


public slots:
    void odbierz_datagram();
    void time_players_basic_plus();
    void send_a2s_player_info();
    void testslo();
    void clear_console();
    void send_rcon_slot();
    void serwer_try_exit();


};

#endif // SERWERINFO_H
